package rtda

/*
	下面是虚拟机线程私有的运行时数据区的层次结构情况
	线程由两个核心成员，一个是程序计数器（PC），一个是栈
	而栈是由许多的Frame组成，而每个Frame是由本地变量和操作数栈组成
JVM
  Thread
    pc
    Stack
      Frame
        LocalVars
        OperandStack
*/
type Thread struct {
	pc    int // 当前正在执行的虚拟机指令（运行java代码时，运行native代码没什么意义）
	stack *Stack
	// todo
}

func NewThread() *Thread {
	return &Thread{
		stack: newStack(1024),
	}
}

func (self *Thread) PC() int {
	return self.pc
}
func (self *Thread) SetPC(pc int) {
	self.pc = pc
}

func (self *Thread) PushFrame(frame *Frame) {
	self.stack.push(frame)
}
func (self *Thread) PopFrame() *Frame {
	return self.stack.pop()
}

func (self *Thread) CurrentFrame() *Frame {
	return self.stack.top()
}
